/* 操作缓存相关的都在这个文件里处理了，不要在页面里写缓存相关的代码 */

import dayjs from "dayjs";
import { isEmpty } from "lodash-es";
import { useAiStore } from "@/store/modules/ai";
const aiStore = useAiStore();

/* ---------- 会话相关方法 开始 ---------- */
// 新建会话
export const addDialogue = ({ title = "新建对话", flag = false }) => {
  let data = {
    time: dayjs().valueOf(),
    title: title,
    status: "end",
    flag: flag
  };
  // 缓存会话
  aiStore.cacheDialogue(data);
  setTimeout(() => {
    switchDialogue(data);
  }, 50);

  return data;
};

// 切换当前会话并保存
export const switchDialogue = (dialogue) => {
  if (dialogue.time == getCurrDialogue().time) {
    return;
  }
  if (getCurrDialogue().status == "running") {
    return ElMessage.warning("当前会话正在输出，请等待输出结束后再切换会话");
  }
  aiStore.setCurrDialogue(dialogue);
};

// 从本地存储中获取历史会话
export const getAllDialogue = (time) => {
  let dialogues = aiStore.dialogues;
  // 如果为空则创建，否则默认上次会话
  if (isEmpty(dialogues)) {
    addDialogue({ flag: true });
  } else if (getCurrDialogue().time == time) {
    // 如果上次会话被删除了则随机选一个
    let dialogue = dialogues[Object.keys(dialogues)[0]];
    switchDialogue(dialogue);
  }

  return dialogues;
};

// 删除会话
export const delDialogue = (time) => {
  aiStore.delDialogue(time);
};

// 修改会话
export const mergeDialogue = ({ title, status, flag }) => {
  aiStore.mergeDialogue({ title, status, flag });
};

// 获取当前会话
export const getCurrDialogue = () => {
  return aiStore.currDialogue;
};
/* ---------- 会话相关方法 结束 ---------- */

/* ---------- 问答记录相关方法 开始 ---------- */
//获取当前会话的历史会话记录
export const getDialogueRecords = () => {
  if (isEmpty(getCurrDialogue())) {
    return [];
  }
  return aiStore.dialogueRecords[getCurrDialogue().time].dialogues;
};
//获取当前会话的向量数据
export const getVectorData = () => {
  if (isEmpty(getCurrDialogue())) {
    return [];
  }
  return aiStore.dialogueRecords[getCurrDialogue().time].vectorData;
};

// 保存问题到本地
export const saveRightDialogueRecord = (question) => {
  let textArr = question.split("\n");
  let dialogue = {
    align: "right",
    con: [{ textArr: textArr }]
  };
  // 第一次提问时修改会话标题
  if (getCurrDialogue().title === "新建对话") {
    aiStore.mergeDialogue({ title: question });
  }
  // 持久化存储会话
  aiStore.addRightDialogueRecord({ dialogue, content: question });

  return dialogue;
};

// 保存Ai回答消息
export const saveLeftDialogueRecord = (dialogue) => {
  aiStore.addLeftDialogueRecord(dialogue);
};

// 修改Ai回答消息或向量数据
export const modifyLeftDialogueRecord = ({ dialogue, tag, vectorData }) => {
  aiStore.editLeftDialogueRecord({ dialogue, tag, vectorData });
};

export const delLeftDialogueRecord = (tag) => {
  aiStore.delLeftDialogueRecord(tag);
};

/* ---------- 问答记录相关方法 结束 ---------- */
